package 对象序列化流;
/*
用对象序列化流序列化了一个对象后，假如我们修改了对象所属的文件，读取数据会不会出现问题呢？
java.io.InvalidClassException:
当序列化运行时检测到类中的以下问题之一时抛出
   类的串行版本与从流中读取的类描述符的类型不匹配
   该类包含未知的数据类型
   该类没有可访问的无参数构造函数

Exception in thread "main" java.io.InvalidClassException: 对象序列化流.Student;
local class incompatible: stream classdesc serialVersionUID = 6231691930182283446,
 local class serialVersionUID = 2193441505923229385     两个UID不同

如果出现问题，如何解决呢？
给对象所属的类+一个值   private static final long serialVersionUID = 42L;


如果一个对象中的某个成员变量不想被序列化，又该如何实现呢？给该成员变量添加一个transient关键字，该关键字标记的成员变量不参与序列化过程。
private transient int age;//被transient修饰的成员变量不参与、序列化过程 age默认值为0

 */
import java.io.*;

public class ObjectStreamDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException{
   // write();
   read();
    }
    private static void read() throws IOException, ClassNotFoundException{
        //对象反序列化
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oos.txt"));
        Object obj = ois.readObject();
        Student s = (Student) obj;//向下转型
        System.out.println(s.getName() + "," + s.getAge());//读取了序列化流的对象
        ois.close();
    }

    //序列化一个对象
    private static void write()throws IOException{
    ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("oos.txt"));
    Student s=new Student("姜恒星",30);
        oos.writeObject(s);//在ObjectoutputStream里面传一个对象
        oos.close();
}
}
